package cn.itcast.bos.dao.base;

import domain.base.Standard;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 基于Spring Data JPA配置
 * 提供接口 由JPARepository来实现
 */

public interface StandardRepository extends JpaRepository<Standard, Integer> {
    //3种查询方法,第一种直接通过实体变量名查询findbyXXlikeXX or findByXXandXX
    List<Standard> findByName(String name);

    //不按照查询规则,直接绑定JPAL查询语句
    //NativeQuery为false配置JPQL,为true配置SQL
    //这里建议是加上JPA占位符 否则容易报错
    @Query(value = "from Standard where name =?", nativeQuery = false)
    List<Standard> queryName1(String name);
    //自定义查询,在dao层配置查询语句
    @Query
    List<Standard> queryName2(String name);

    //当涉及到修改和删除操作时候需要在注解上添加Modifying
    @Query(value = "update Standard set minLength=?1 where id=?2")
    @Modifying
    //同时需要加上事务否则报错
    @Transactional
    //在测试类里修改操作会回滚,需要添加如下注解
    @Rollback(false)
    void updateMinLength(Integer minLength,Integer id);

}
